26.Excel97から変わった機能
26a.メニュ−
Excel97では、メニュ−バ−、ツ−ルバ−、ショットカットメニュ−を、
CommandBarsオブジェクトとして扱う。(Excel95ではメニュ−バ−、ツ−ルバ−は
完全に別れていた)
26a−1 組み込みコマンドバ−一覧
下図に1行:インデックス番号、2行:コマンドバ−、3行:種類を示す。

下記マクロ実行で、上図をワ−クシ−トへ表示します。
Sub 例26a1()
i = 1
For Each cm In Application.CommandBars
Cells(1, i) = cm.Index
Cells(2, i) = cm.Name
If cm.Type = 0 Then
Cells(3, i) = "msoBarTypeNomak"
ElseIf cm.Type = 1 Then
Cells(3, i) = "msoBarTypeMenuBar"
Else
Cells(3, i) = "msoBarTypePopup"
End If
j = 5
For Each kumok In cm.Controls
Cells(j, i) = kumok.Caption & " " & kumok.Id
j = j + 1
Next
i = i + 1
Next
End Sub
26a−2 組み込みメニュ−へ追加
下図のようにワ−クシ−トメニュ−の最後へメニュ−を追加するマクロ例

Sub 例26a2()
Set menu1 = CommandBars("worksheet menu bar"). _
Controls.Add(Type:=msoControlPopup)
menu1.Caption = "個人メニュ−"
With menu1
.Controls.Add Type:=msoControlButton
With .Controls(1)
.Caption = "追加1"
.OnAction = "Macro1"
End With
.Controls.Add Type:=msoControlButton
With .Controls(2)
.Caption = "追加2"
.OnAction = "Macro2"
End With
.Controls.Add Type:=msoControlPopup
With .Controls(3)
.Caption = "追加3"
.Controls.Add Type:=msoControlButton
.Controls(1).Caption = "サブ追加1"
.Controls(1).OnAction = "Macro3"
.Controls.Add Type:=msoControlButton
.Controls(2).Caption = "サブ追加2"
.Controls(2).OnAction = "Macro4"
End With
End With
End Sub
上記の場合、追加したメニューはExcelを終了しても残ります。
下記の、Temporary:=TrueでExcel終了時追加した分を自動的に削除します。
Controls.Add(Type:=msoControlPopup, Temporary:=True)
(1).メニュ−の淡色表示

上図のように淡色表示にした場合は、そのメニュ−の指定は出来ません。
Sub 例26121()
Set menu1 = CommandBars("worksheet menu bar")
menu1.Controls("個人メニュ−").Controls("追加1").Enabled = False
End Sub
(2).組み込みメニュ−を初期状態へ戻す
下記はワ−クシ−トメニュ−を元の状態へ戻した例
Sub 例26122()
Set menu1 = CommandBars("worksheet menu bar")
menu1.Reset
End Sub
(3).ダブリ追加の防止
本例の組み込みメニュ−へ追加(例2612)を再度実行した場合、そのたびに
メニュ−が追加されて行きます。下記を"マクロ例2612"の始めに記述すれば
削除後追加するのでダブリを防止できる。(無い場合のエラ−処理も入れる事)
Sub 例26123()
On Error Resume Next
CommandBars("worksheet menu bar").Controls("個人メニュ−").Delete
On Error GoTo 0
End Sub
26a−3 オリジナルメニュ−バ−の作成
本例はExcel95のサンプルmenu作成と同じメニュ−を表示
します。Excel95のオリジナルメニュ−をExcel95.2000へ変更したい方はマクロソ−ス、
Excel95と、Excel95.2000
を比較すれば変更箇所が判ると思います。
(1)メニューバーの追加

chkm = 0
For Each cm In Application.CommandBars
If cm.Name = mym Then
CommandBars(mym).Visible = True
chkm = 1
Exit Sub
End If
Next
If chkm = 0 Then
Set menu2 = Application.CommandBars.Add _
(Name:=mym, MenuBar:=True)
With menu2
.Visible = True
.Controls.Add Type:=msoControlPopup
.Controls(1).Caption = "ファイル"
.Controls.Add Type:=msoControlPopup
.Controls(2).Caption = "HTMLへ変換"
.Controls.Add Type:=msoControlPopup
.Controls(3).Caption = "メニュ-終了"
End With
End If
・メニュ−バ−(CommandBars)を追加する場合、既にある名前と同じ名前を
追加するとエラ−になります「実行時エラ−”5”」。上記のように事前に
チェックしたほうが良い。
・本例ではメニュ−バ−名は、変数「mym」へ事前に入れてあります。
(2)メニューの追加1

Set menu2 = CommandBars(mym).Controls(1)
With menu2
.Controls.Add Type:=msoControlButton
With .Controls(1)
.Caption = "開く"
.OnAction = "men10"
End With
.Controls.Add Type:=msoControlButton
With .Controls(2)
.Caption = "閉じる"
.OnAction = "men11"
End With
.Controls.Add Type:=msoControlButton
With .Controls(3)
.Caption = "上書き保存"
.OnAction = "men12"
.BeginGroup = True
End With
.Controls.Add Type:=msoControlButton
With .Controls(4)
.Caption = "名前を付けて保存"
.OnAction = "men13"
End With
.Controls.Add Type:=msoControlButton
With .Controls(5)
.Caption = "Excelの終了"
.OnAction = "men14"
.BeginGroup = True
End With
End With
Sub men10()
fname = Application.GetOpenFilename
If fname = False Then
Exit Sub
End If
Workbooks.Open Filename:=fname
End Sub
Sub men11()
ActiveWorkbook.Close
End Sub
Sub men12()
ActiveWorkbook.Save
End Sub
Sub men13()
fname = Application.GetSaveAsFilename
ActiveWorkbook.SaveAs Filename:=fname, FileFormat:=xlNormal, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
End Sub
Sub men14()
Application.Quit
End Sub
(3)メニューの追加2

Set menu2 = CommandBars(mym).Controls("HTMLへ変換")
With menu2
.Controls.Add Type:=msoControlButton
With .Controls(1)
.Caption = "HTML変換スタ−ト"
.OnAction = "Macro1"
End With
'サブメニュウ項目の追加
.Controls.Add Type:=msoControlPopup
With .Controls(2)
.Caption = "メニュー項目"
.BeginGroup = True
.Controls.Add Type:=msoControlButton
.Controls(1).Caption = "サブメニュウ1"
.Controls(1).OnAction = "Macro3"
.Controls.Add Type:=msoControlButton
.Controls(2).Caption = "サブメニュウ2"
.Controls(2).OnAction = "Macro4"
End With
End With
(4)メニューの追加3

Set menu2 = CommandBars(mym).Controls("メニュ-終了")
With menu2
.Controls.Add Type:=msoControlButton
With .Controls(1)
.Caption = "excelに戻る"
.OnAction = "men70"
End With
.Controls.Add Type:=msoControlButton
With .Controls(2)
.Caption = "キャンセル"
End With
End With
Sub men70()
On Error Resume Next
shsuu = Worksheets.Count
For i = 1 To shsuu
Worksheets(i).Activate
If ActiveSheet.Type = xlWorksheet Then
MenuBars(xlWorksheet).Activate
er1 = 1
Exit For
End If
Next
If er1 = 0 Then
Workbooks.Add
MenuBars(xlWorksheet).Activate
End If
On Error GoTo 0
End Sub
26a−4 ショ−トカットメニュ−の追加
"smenu1"実行で下記図のようにショ−トカットメニュ−に追加される。(削除はsmenu2)

Sub smenu1()
With CommandBars("cell").Controls.Add
.Caption = "HTML変換スタ-ト"
.OnAction = "Macro1"
.BeginGroup = True
End With
End Sub
Sub smenu2()
CommandBars("cell").Controls("HTML変換スタ-ト").Delete
End Sub
Sub smenu3()
With ShortcutMenus(xlWorksheetCell)
.MenuItems.Add "-"
.MenuItems.Add "HTML変換スタ-ト", "Macro1"
End With
End Sub
smenu3はExcel95のマクロであるが、Excel2000の標準モジュ−ルへ貼り付けて使用した
場合smenu1実行と同じ結果となる。ただしsmenu1では削除を行うまで追加した項目
は残るが、smenu3の場合はExcel終了で追加項目は消える。
なお、Excel2000の場合Addの引数に”.Add(temporary:=True)”のようにTrueを
指定すればExcel終了時に追加項目は消えます。
目次へ戻る